home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / RAMDSKA3.68K < prev    next >
Text File  |  2001-09-30  |  4KB  |  144 lines

  1. ;RAMDSKA3.68K    MAR-07-89    (ALSO SEE "INFOSTR")
  2. ;RAM DISK HANDLER
  3. ;WRITTEN BY LOREN BLANEY FOR DFM ENGINEERING
  4. ;
  5. ;REVISION HISTORY:
  6. ;MAR-07-89, BASED ON RAMDSKA.68K, MODIFIED FOR AMIGA-2000.
  7. ;
  8. ;WARNING:
  9. ;IF THE RAM DISK IS NOT CORRECTLY SIZED, MEMORY CAN BE BOMBED.
  10. ;
  11. ;INPUTS:
  12. ;    UNIT:    UNIT NUMBER
  13. ;    NBLKS:    NUMBER OF BLOCKS TO READ/WRITE
  14. ;    FADDR:    ADDRESS IN MEMORY TO WRITE/READ
  15. ;    BLKNOX:    BLOCK ON THE DISK TO START READ/WRITE
  16.  
  17.     NOLIST
  18.     INCLUDE    SYSPAG
  19.     LIST
  20.  
  21. UNTNUM    EQU    2        ;UNIT NUMBER OF FIRST RAM DISK
  22.                 ; (SECOND RAM DISK = UNTNUM + 1)
  23.  
  24. SIZE    EQU    1024 *256    ;MAX SIZE: 1024 BLOCKS
  25.                 ; (ALSO SEE "INFOSTR" AND "MAXTBL"
  26. BASE0    EQU    $C00000        ;BASE ADDRESS OF EXPANSION RAM
  27. BASE1    EQU    $020000        ;BASE ADDRESS OF RAM DISK SPACE
  28.  
  29. ;HANDY COMPARISON CHART:
  30. ;     HEX BYTES    MEGA BYTES      BYTES            BLOCKS
  31. ;     $40000        1/4          262,144        1024
  32. ;     $80000        1/2          524,288        2048
  33. ;     $C0000        3/4          786,432        3072
  34. ;    $100000        1        1,048,576        4096
  35.  
  36. CIAA    EQU    $BFE001        ;8520-A
  37.  
  38.     ORG    $7D710
  39. START    EQU    @        ;ADDRESS WHERE THIS HANDLER STARTS
  40.  
  41. ;-----------------------------------------------------------------------
  42. ;
  43. RAMDSK    DC.L    DUMMY        ;0
  44.     DC.L    DUMMY        ;1
  45.     DC.L    READ        ;2
  46.     DC.L    WRITE        ;3
  47.     DC.L    DUMMY        ;4
  48.     DC.L    GETINFO        ;5
  49.     DC.L    DUMMY        ;6 (SPARE)
  50.     DC.L    DUMMY        ;7 (SPARE)
  51.  
  52. ;-----------------------------------------------------------------------
  53. ;READ BYTES FROM RAM DISK AND STORE THEM INTO MEMORY
  54. ;
  55. READ    MOVEM.L    D0-D7/A3-A6,-(SP)    ;SAVE REGISTERS
  56.     BSR    SETUP            ;SET UP A5, A6, AND D0
  57.     BSR    MOVBLK            ;MOVE BLOCKS FROM A6 TO A5
  58.     MOVEM.L    (SP)+,D0-D7/A3-A6    ;RESTORE REGISTERS
  59. DUMMY    RTS
  60.  
  61. ;-----------------------------------------------------------------------
  62. ;WRITE BYTES FROM MEMORY ONTO THE RAM DISK
  63. ;
  64. WRITE    MOVEM.L    D0-D7/A2-A6,-(SP)    ;SAVE REGISTERS
  65.     BSR.S    SETUP            ;SET UP A5, A6, AND D0
  66.     EXG    A5,A6
  67.     BSR.S    MOVBLK            ;MOVE BLOCKS FROM A6 TO A5
  68.     MOVEM.L    (SP)+,D0-D7/A2-A6    ;RESTORE REGISTERS
  69.     RTS
  70.  
  71. ;-----------------------------------------------------------------------
  72. ;RETURN THE ADDRESS OF THE INFORMATION BLOCK IN D0
  73. ;
  74. GETINFO    MOVE.L    #INFO,D0
  75.     RTS
  76.  
  77. INFO    DC.L    START        ;HANDLER START AND END ADDRESSES
  78.     DC.L    END
  79.     DC.L    INFOSTR
  80. INFOSTR    ASCII    'RAMDSKA3  MAR-07-89  Memory, 1024 blocks'
  81.     DC.B    0
  82.  
  83. ;-----------------------------------------------------------------------
  84. ;SET UP A5 AND A6 AS MEMORY ADDRESS POINTERS AND D0 AS THE NUMBER OF
  85. ; 32-BYTE BLOCKS TO MOVE.
  86. ;
  87. SETUP    LEA    BASE0.L,A6    ;ASSUME EVEN NUMBERED UNIT
  88.     BTST    #0,UNIT        ;CHECK UNIT NUMBER
  89.     BEQ.S    SU10        ;BRANCH IF IT IS EVEN
  90.     LEA    BASE1.L,A6    ;GET BASE FOR ODD NUMBERED UNIT
  91. SU10
  92.     MOVE.L    BLKNOX,D0    ;A6:= BLKNOX * 256 + BASE
  93.     ASL.L    #8,D0        ; = MEMORY ADDRESS IN RAM DISK
  94.     ADDA.L    D0,A6
  95.     MOVEA.L    FADDR,A5    ;A5:= MEMORY ADDRESS
  96.     MOVE.L    NBLKS,D0    ;D0:= NBLKS * 8
  97.     ASL.L    #3,D0        ; = NUMBER OF 32-BYTE BLOCKS (256 /32 =8)
  98.     RTS
  99.  
  100. ;-----------------------------------------------------------------------
  101. ;MOVE D0*32 BYTES FROM A6 TO A5.
  102. ; MOST REGISTERS ARE DESTROYED.
  103. ;
  104. MOVBLK    MOVE.L    D0,D1        ;PUT UPPER 16 BITS OF D0 IN D1
  105.     SWAP    D1        ; FOR THE 16-BIT DBF INSTRUCION
  106.     BRA.S    MOV20        ;ENTER LOOP AT BOTTOM
  107.  
  108. MOV10    MOVEM.L    (A6)+,A3-A4/D2-D7 ;READ 32 BYTES AT A6
  109.     MOVEM.L    A3-A4/D2-D7,(A5)  ;WRITE 32 BYTES AT A5
  110.     ADDA.L    #32,A5        ;(POST INCREMENTING IS NOT ALLOWED)
  111. MOV20    DBF    D0,MOV10    ;DECREMENT LOW 16 BITS, AND LOOP
  112.     DBF    D1,MOV10    ;DECREMENT HIGH 16 BITS, AND LOOP
  113.     RTS
  114.  
  115.     IF    @ >= $7D800
  116.     ERROR -- TOO BIG
  117.     ENDIF
  118.  
  119. END    EQU    @-1        ;ADDRESS OF END OF HANDLER
  120.  
  121. ;======================================================================
  122. ;HOOK THIS HANDLER INTO THE UNIT-HANDLER TABLE
  123. ;
  124.     ORG    MAXTBL + 4 *UNTNUM
  125.     DC.L    SIZE /256
  126.     DC.L    SIZE /256
  127.  
  128.     ORG    OFFTBL + 4 *UNTNUM
  129.     DC.L    0
  130.     DC.L    0
  131.  
  132.     ORG    UNTTBL + 4 *UNTNUM
  133.     DC.L    RAMDSK
  134.     DC.L    RAMDSK
  135.  
  136.     END
  137. 
  138.     DC.L    SIZE /256
  139.  
  140.     ORG    OFFTBL + 4 *UNTNUM
  141.     DC.L    0
  142.     DC.L    0
  143.  
  144.     ORG    UNTTBL